And add some tests that fsck reports an error.
typedef struct {
guint n_objects;
-} HtFsckData;
+ gboolean had_error;
+} OtFsckData;
static gboolean
-checksum_packed_file (HtFsckData *data,
+checksum_packed_file (OtFsckData *data,
const char *path,
GChecksum **out_checksum,
GError **error)
g_variant_unref (xattrs);
return ret;
}
-
static void
object_iter_callback (OstreeRepo *repo,
GFileInfo *file_info,
gpointer user_data)
{
- HtFsckData *data = user_data;
+ OtFsckData *data = user_data;
struct stat stbuf;
GChecksum *checksum = NULL;
GError *error = NULL;
if (strcmp (checksum_string, g_checksum_get_string (checksum)) != 0)
{
+ data->had_error = TRUE;
g_printerr ("ERROR: corrupted object '%s' expected checksum: %s\n",
path, g_checksum_get_string (checksum));
}
ostree_builtin_fsck (int argc, char **argv, const char *repo_path, GError **error)
{
GOptionContext *context;
- HtFsckData data;
+ OtFsckData data;
gboolean ret = FALSE;
OstreeRepo *repo = NULL;
goto out;
data.n_objects = 0;
+ data.had_error = FALSE;
repo = ostree_repo_new (repo_path);
if (!ostree_repo_check (repo, error))
if (!ostree_repo_iter_objects (repo, object_iter_callback, &data, error))
goto out;
+ if (data.had_error)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Encountered filesystem consistency errors");
+ goto out;
+ }
if (!quiet)
g_printerr ("Total Objects: %u\n", data.n_objects);
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Colin Walters <walters@verbum.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Author: Colin Walters <walters@verbum.org>
+
+set -e
+
+echo "1..1"
+
+. libtest.sh
+
+setup_test_repository "regular"
+$OSTREE checkout test2 checkout-test2
+cd checkout-test2
+chmod o+x firstfile
+$OSTREE fsck -q 2>/dev/null && (echo 1>&2 "fsck unexpectedly succeeded"; exit 1)
+chmod o-x firstfile
+$OSTREE fsck -q
+
+echo "ok chmod"
+++ /dev/null
-#!/bin/bash
-#
-# Copyright (C) 2011 Colin Walters <walters@verbum.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Author: Colin Walters <walters@verbum.org>
-
-set -e
-
-. libtest.sh
-
-echo '1..1'
-
-setup_fake_remote_repo1
-cd ${test_tmpdir}
-mkdir repo
-$OSTREE init
-$OSTREE remote add origin $(cat httpd-address)/ostree/gnomerepo
-$OSTREE pull origin main
-echo "ok pull"
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Colin Walters <walters@verbum.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Author: Colin Walters <walters@verbum.org>
+
+set -e
+
+. libtest.sh
+
+echo '1..1'
+
+setup_fake_remote_repo1
+cd ${test_tmpdir}
+mkdir repo
+$OSTREE init
+$OSTREE remote add origin $(cat httpd-address)/ostree/gnomerepo
+$OSTREE pull origin main
+echo "ok pull"